package core

import "fmt"

type Error struct {
	Code    int      `json:"code"`
	Msg     string   `json:"msg"`
	Details []string `json:"details"`
}

var codes = map[int]string{}

func RegisterErr(code int, msg string) *Error {
	if _, ok := codes[code]; ok {
		panic(fmt.Sprintf("错误码 %d 重复注册", code))
	}
	codes[code] = msg
	return &Error{
		Code: code,
		Msg:  msg,
	}
}

// 打印错误信息
func (e *Error) PrintError() string {
	return fmt.Sprintf("错误码： %d , 错误信息： %s", e.Code, e.Msg)
}

// 获取错误码
func (e *Error) GetCode() int {
	return e.Code
}

// 获取错误信息
func (e *Error) GetMsg() string {
	return e.Msg
}

// 获取详细错误信息
func (e *Error) GetDetails() []string {
	return e.Details
}

// 添加详细信息
func (e *Error) WithDetails(details ...string) *Error {
	e.Details = []string{}
	for _, d := range details {
		e.Details = append(e.Details, d)
	}
	return e
}
